package com.quickask.service;

import com.quickask.entity.AsknowUserEntity;
import com.quickask.entity.AsknowUserLocationEntity;
import com.quickask.entity.AsknowUserPrivilegeEntity;

import java.util.List;
import java.util.Map;

/**
 * Created by NaSa on 2015/9/3.
 */
public interface UserService extends BaseService{
    public void addUser(AsknowUserEntity user);
    public AsknowUserEntity loadUser(Integer id);
    public List<AsknowUserEntity> showAllUser();

    /**
     * 通过手机注册
     * @param phoneNum  手机号码
     * @param passwordNo 密码
     * @param zone 区号，中国为86
     * @param code 短信验证码
     * @return 返回注册结果码,详见com.quickask.operate.data.ResultCode.java
     */
    public int registerByPhone(String phoneNum, String passwordNo, String zone, String code);

    /**
     * 普通账号注册
     * @param account 账号
     * @param passwordNo 密码
     * @return 返回注册结果码,详见com.quickask.operate.data.ResultCode.java
     */
    public int registerByNormal(String account, String passwordNo);

    /**
     * 通过手机账号登录
     * @param phoneNum 手机号码
     * @param passwordNo 密码
     * @return AsknowUserEntity实体，主要包含生成的用户token
     */
    public AsknowUserEntity loginByPhone(String phoneNum, String passwordNo);

    /**
     * 通过普通账号登录
     * @param account 账号
     * @param passwordNo 密码
     * @return 返回AsknowUserEntity实体，主要包含生成的用户token
     */
    public AsknowUserEntity loginByNormal(String account, String passwordNo);

    /**
     * 注销登录
     * @param userId 用户Id
     * @return 返回结果码,详见com.quickask.operate.data.ResultCode.java
     */
    public int logout(Integer userId);

    /**
     *
     * @param userId 用户id
     * @param token  用户token
     * @return
     */
    public Integer updateRefreshToken(Integer userId, String token);

    /**
     * 完善个人信息
     * @param userId 用户id
     * @param properties 更新的属性
     * @return 返回结果码，详见com.quickask.operate.data.ResultCode.java
     */
    public int updatePersonalImformation(Integer userId, Map<String, Object> properties);


    /**
     * 更新用户位置信息
     * @param userJson
     * @return
     */
    public AsknowUserLocationEntity updateUserLocation(String userJson);

    /**
     * 获取token
     * @param userId 用户id
     * @return token
     */
    public String loadUserToken(Integer userId);

    /**
     * 获取实体
     * @param userId
     * @return
     */
    public AsknowUserPrivilegeEntity loadAsknowUserPrivilegeEntity(int userId);


    /**
     * 生成七牛上传的token
     * @return token
     */
    public String generateQiniuToken();
}
